//******************************************************************************
//* DeGsoft GeN                                                                *
//* ===========                                                                *
//* GeN(tm) : ERP Software (http://www.degsoft.com.ar/sistemas/GeN)            *
//* Copyright (c) 2002-2011 by the Degsoft                                     *
//* For more information visit: http://www.degsoft.com.ar                      *
//* This program is free software. You can redistribute it and/or modify       *
//* it under the terms of the GNU General Public License as published by       *
//* the Free Software Foundation; either version 3 of the License.             *
//******************************************************************************

unit ImprimirDM;

interface

uses
  SysUtils, Classes, RpRender, RpRenderCanvas, RpRenderPrinter, RpBase,
  RpSystem, RpRave, RpDefine, RpCon, RpConDS, DB, DataModule,
  IBCustomDataSet, IBQuery, RpRenderText, ExtDlgs, Dialogs, RpFiler,
  RpRenderRTF, RpRenderHTML, RpRenderPDF, RpRenderPreview, frxClass, frxDBSet,
  frxChBox, frxExportPDF, frxExportXLS, frxDesgn, frxExportText, frxExportDBF,
  frxExportCSV, frxExportMail, frxExportImage, frxExportRTF, frxExportXML,
  frxExportHTML, frxBarcode;

type
  TImprimirDataModule = class(TDataModule)
    Query: TIBQuery;
    frxReport1: TfrxReport;
    frxDBDataset1: TfrxDBDataset;
    frxXLSExport1: TfrxXLSExport;
    frxPDFExport1: TfrxPDFExport;
    frxCheckBoxObject1: TfrxCheckBoxObject;
    frxDesigner1: TfrxDesigner;
    frxBarCodeObject1: TfrxBarCodeObject;
    frxHTMLExport1: TfrxHTMLExport;
    frxXMLExport1: TfrxXMLExport;
    frxRTFExport1: TfrxRTFExport;
    frxJPEGExport1: TfrxJPEGExport;
    frxMailExport1: TfrxMailExport;
    frxCSVExport1: TfrxCSVExport;
    frxDBFExport1: TfrxDBFExport;
    frxSimpleTextExport1: TfrxSimpleTextExport;
    Function VTA(nro,let:string):string;
    Function OPER(nro,let:string):string;
    Function PRE(nro,let:string):string;
    Function PlanillaCobrador(nro,let:string):string;
    Function Contrato(nro,let:string):string;
    Procedure Impr(vsql, reporte:string);
    Procedure CSV(sql,n:string);
    Procedure SImpr(vsql, reporte:string);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  ImprimirDataModule: TImprimirDataModule;

implementation

{$R *.dfm}

Procedure TImprimirDataModule.SImpr;
begin
 Query.SQL.Text := vsql;
 Query.Open;
 with frxReport1 do
  begin
   LoadFromFile(Path+'Report\'+reporte+'.fr3');
   try
    ShowReport(True);
   finally
    Free;
   end;
  end;
end;

Procedure TImprimirDataModule.CSV;//exporta consulta a excel
var
 m :TStringList;
 g : TSaveDialog;
 csv  :TextFile;
 col :string;
 f,c :integer;
begin
Query.SQL.Text:=sql;
Query.Open;
try
 m := TStringList.Create;
 g := TSaveDialog.Create(Self);
 finally
 g.Filter := 'Ficheros Excel (*.csv)|*.csv|Todos los ficheros|*.*';
 g.Title := n;
 g.DefaultExt := 'csv';
 g.FileName := n;
 //ingresa los campos
 for c := 0 to Query.FieldCount-1  do //columnas
  begin
   col:=col+'"'+Query.Fields.Fields[c].DisplayName+'",';
  end;
 m.Append(col);
 //ingresa el contenido
 while not Query.Eof do//filas
  begin
   col:='';
   for c := 0 to Query.FieldCount-1  do //columnas
    begin
     col:=col+'"'+Query.Fields.Fields[c].AsString+'",';
    end;
   m.Append(col);
   Query.Next;
  end;
 if g.Execute then
  begin
   assignFile(csv, g.FileName);
   rewrite(csv);
   write(csv,m.Text);
   closeFile(csv);
  end;
 end;
 m.Free;
 g.free;
end;

Procedure TImprimirDataModule.Impr;
begin
 if reporte='' then  reporte:=dm.ConfigQuery.FieldByName('Reporte').AsString;
 Query.SQL.Text := 'SELECT ' +
 QuotedStr(dm.ConfigQuery.FieldByName('NOMBRE').AsString) + ' As Empresa,' +vsql;
 Query.Open;
 with frxReport1 do
  begin
   LoadFromFile(Path+'Report\'+reporte+'.fr3');
   try
    ShowReport(True);
   finally
    Free;
   end;
  end;
end;

Function TImprimirDataModule.PRE;
begin
Result :=
'  "Cliente".NOMBRE,' + '  "Cliente".TITULAR,' +
'  "Cliente".DIRECCION,' + '  "Cliente".DIRECCIONCOMERCIAL,' +
'  "Articulo".DESCRIPCION,' + '  "PresupuestoItem".OPERACION,' +
'  "PresupuestoItem".ARTICULO,' + '  "PresupuestoItem".CANTIDAD,' +
'  "PresupuestoItem".PRECIO,' +
'  ("PresupuestoItem".PRECIO * "PresupuestoItem".CANTIDAD ) as PREXCANT,' +
'  "PresupuestoItem".SERVICIO,' + '  "PresupuestoItem".DESCRIPCION AS DESCR,' +
'  "Presupuesto".CODIGO,' + '  "Presupuesto".LETRA,' + '  "Presupuesto".FECHA,' +
'  "Presupuesto".COMPROBANTE,' + '  "Presupuesto".IVA3,' + '  "Presupuesto".TOTAL,' +
'  "Presupuesto".CONTADO,' + '  "Presupuesto".CLIENTE,' + '  "Presupuesto".SUBTOTAL,' +
'  "Presupuesto".DESCUENTO,' + '  "Presupuesto".IMPUESTO,' + '  "Presupuesto".IVA2,' +
'  "Presupuesto".IVA1,' + '  "Presupuesto".EXCENTO,' + '  "Presupuesto".SALDO,' +
'  "Presupuesto".PAGADO' + ' FROM' + '  "Presupuesto"' +
'  INNER JOIN "PresupuestoItem" ON ("Presupuesto".CODIGO = "PresupuestoItem".OPERACION)' +
'  INNER JOIN "Articulo" ON ("PresupuestoItem".ARTICULO = "Articulo".CODIGO)'+
'  INNER JOIN "Cliente" ON ("Presupuesto".CLIENTE = "Cliente".CODIGO)' +
'  WHERE' + '  ("Presupuesto".CODIGO = ' +nro+
'  ) AND' + '  ("Presupuesto".LETRA = ' + QuotedStr(let)+
'  )' + '';
end;

Function TImprimirDataModule.VTA;
begin
Result :=
'  "Cliente".NOMBRE,' + '  "Cliente".TITULAR,' +
'  "Cliente".DIRECCION,' + '  "Cliente".DIRECCIONCOMERCIAL,' +
'  "Articulo".DESCRIPCION,' + '  "VentaItem".OPERACION,' +
'  "VentaItem".ARTICULO,' + '  "VentaItem".CANTIDAD,' +
'  "VentaItem".PRECIO,' +
'  ("VentaItem".PRECIO * "VentaItem".CANTIDAD ) as PREXCANT,' +
'  "VentaItem".SERVICIO,' + '  "VentaItem".DESCRIPCION AS DESCR,' +
'  "Venta".CODIGO,' + '  "Venta".LETRA,' + '  "Venta".FECHA,' +
'  "Venta".COMPROBANTE,' + '  "Venta".IVA3,' + '  "Venta".TOTAL,' +
'  "Venta".CONTADO,' + '  "Venta".CLIENTE,' + '  "Venta".SUBTOTAL,' +
'  "Venta".DESCUENTO,' + '  "Venta".IMPUESTO,' + '  "Venta".IVA2,' +
'  "Venta".IVA1,' + '  "Venta".EXCENTO,' + '  "Venta".SALDO,' +
'  "Venta".PAGADO' + ' FROM' + '  "Venta"' +
'  INNER JOIN "VentaItem" ON ("Venta".CODIGO = "VentaItem".OPERACION)' +
        '  INNER JOIN "Articulo" ON ("VentaItem".ARTICULO = "Articulo".CODIGO)'
        + '  INNER JOIN "Cliente" ON ("Venta".CLIENTE = "Cliente".CODIGO)' +
        ' WHERE' + '  ("Venta".CODIGO = ' +nro
        + ' ) AND' + '  ("Venta".LETRA = ' + QuotedStr(let)
        + ' )' + '';
end;

Function TImprimirDataModule.OPER;
begin
Result :=
'  "Cliente".NOMBRE,' + '  "Cliente".TITULAR,' +
'  "Cliente".DIRECCION,' + '  "Cliente".DIRECCIONCOMERCIAL,' +
'  "Articulo".DESCRIPCION,' + '  "OperacionItem".OPERACION,' +
'  "OperacionItem".ARTICULO,' + '  "OperacionItem".CANTIDAD,' +
'  "OperacionItem".PRECIO,' +
'  ("OperacionItem".PRECIO * "OperacionItem".CANTIDAD ) as PREXCANT,' +
'  "OperacionItem".SERVICIO,' + '  "OperacionItem".DESCRIPCION AS DESCR,' +
'  "Operacion".CODIGO,' + '  "Operacion".LETRA,' + '  "Operacion".FECHA,' +
'  "Operacion".COMPROBANTE,' + '  "Operacion".IVA3,' + '  "Operacion".TOTAL,' +
'  "Operacion".CONTADO,' + '  "Operacion".CLIENTE,' + '  "Operacion".SUBTOTAL,' +
'  "Operacion".DESCUENTO,' + '  "Operacion".IMPUESTO,' + '  "Operacion".IVA2,' +
'  "Operacion".IVA1,' + '  "Operacion".EXCENTO,' + '  "Operacion".SALDO,' +
'  "Operacion".PAGADO' + ' FROM' + '  "Operacion"' +
'  INNER JOIN "OperacionItem" ON ("Operacion".CODIGO = "OperacionItem".OPERACION)' +
        '  INNER JOIN "Articulo" ON ("OperacionItem".ARTICULO = "Articulo".CODIGO)'
        + '  INNER JOIN "Cliente" ON ("Operacion".CLIENTE = "Cliente".CODIGO)' +
        ' WHERE' + '  ("Operacion".CODIGO = ' +nro
        + ' ) AND' + '  ("Operacion".LETRA = ' + QuotedStr(let)
        + ' )' + '';
end;

Function TImprimirDataModule.PlanillaCobrador;
begin
Result :=
'  "Cobrador".NOMBRE AS COBRADOR,'+
'  "Cliente".ZONA,'+
'  "CtaCte".FECHA,'+
'  "CtaCte".SALDO,'+
'  "Cliente".NOMBRE AS CLIENTE,'+
'  "CtaCteItem".CUOTA,'+
'  "CtaCte".OPERACION'+
' FROM'+
'  "CtaCte"'+
'  INNER JOIN "CtaCteItem" ON ("CtaCte".CLIENTE = "CtaCteItem".CLIENTE) AND ("CtaCte".OPERACION = "CtaCteItem".OPERACION)'+
'  INNER JOIN "Cliente" ON ("CtaCteItem".CLIENTE = "Cliente".CODIGO)'+
'  INNER JOIN "Cobrador" ON ("CtaCte".COBRADOR = "Cobrador".CODIGO)'+
' WHERE'+
'  ("CtaCte".OPERACION = '+nro+')'+
' ORDER BY'+
'  "CtaCteItem".CUOTA'+
'';
end;

Function TImprimirDataModule.Contrato;
begin
Result :=
'CODIGO, NUMERO, FECHA, TIPO, DIA, DESCRITO, MES, MESCRITO, ANO, AESCRITO, '+
'CANONES, CIMPORTE, CIESCRITO, IMPORTETOTAL, ITESCRITO, TIEMPO, T2, BIEN, '+
'DADOR, DTIPO, DNOMBRE, DAPELLIDO, DDOCUMENTO, DDTIPO, DDOMICILIO, DDNUMERO, '+
'DCIUDAD, DPROVINCIA, DPAIS, TOMADOR, TTIPO, TNOMBRE, TAPELLIDO, TDOCUMENTO, '+
'TDTIPO, TDOMICILIO, TDTRABAJO, TCIUDAD, TPROVINCIA, TPAIS '+
'FROM "Contrato" WHERE NUMERO='+nro;
end;

end.
